iT邦幫忙

2021 iThome 鐵人賽

DAY 19
0

Upload

Vaadin 檔案上傳檔案使用 Upload Component,Upload 支援單個或多個檔案視覺化拖放,可限制檔案類型、檔案大小、圖檔尺寸...等功能。

接收器

檔案從client上傳至server時須指定接收器 Receiver,vaadin 提供多種已實作的 Receiver

  • FileBuffer
  • MemoryBuffer
  • MultiFileBuffer
  • MultifileMemoryBuffer

學生相片上傳

更改資料庫欄位

請開新檔 V04__AlterStudent.sql,在 table Student 增加欄位 photo

ALTER TABLE Student ADD photo VARCHAR(100);

上傳/接收

我們使用同一案例上傳學生相片,請開啟 StudentEditDialog.kt,下方增加上傳功能,存檔並將檔名存在student.photo欄位,以便後續存取

val buffer = FileBuffer()
var fileName : String? = ""
upload {
    setReceiver(buffer)
    setAcceptedFileTypes("image/jpeg", "image/png")
    maxFiles = 1
    maxFileSize = 1024*1024
    addSucceededListener {
        fileName = "/students/photos/photo_${studentId}.${buffer.fileName.split(".").run { get(size-1) }}"
        val file = File(VaadinServlet.getCurrent().servletContext.getRealPath("/") + fileName)
.${buffer.fileName.split(".").get(1)}"
        val file = File(fileName)
        student.photo = fileName
        FileUtils.copyToFile(buffer.inputStream, file)
    }
}

第一、四行,使用 FileBuffer 接收上傳資料
第五行,限制檔案型態
第六行,因為相片只需要一張,限制上傳數量為1
第七行,檔案大小以byte為單位
第八行,檔案上傳成功執行addSucceededListener{}

取得當前實際目錄

Vaadin 和一般J2EE網路應用程式一樣,使用 ServletContext (J2EE規範)的getRealPath()方法取得實際路徑。

VaadinServlet.getCurrent().servletContext.getRealPath("/")

https://ithelp.ithome.com.tw/upload/images/20211004/20138680mHLyvYLyel.png


上一篇
Grid 展開 Detail - day18
下一篇
Dialog 關閉後更新 Grid 資料 / 顯示儲存的圖檔 - day20
系列文
使用 Kotlin 快速開發 Web 程式 -- Vaadin30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言